function f1() {
	// 空函数F:
	function F() { }
	// 把F的原型指向Student.prototype:
	F.prototype = Student.prototype;

	// 把PrimaryStudent的原型指向一个新的F对象，F对象的原型正好指向Student.prototype:
	PrimaryStudent.prototype = new F();

	// 把PrimaryStudent原型的构造函数修复为PrimaryStudent:
	PrimaryStudent.prototype.constructor = PrimaryStudent;
}


function inherits(Child, Parent) {
    var F = function () {};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
}


// Admin.prototype = Object.create(User.prototype);
// Admin.prototype.show = function() {};	
function extend(sub, sup) {
  sub.prototype = Object.create(sup.prototype);
  Object.defineProperty(sub.prototype, "constructor", {
    value: sub,
    enumerable: false
  });
}



// 方法进行拷贝 ， https://www.liaoxuefeng.com/wiki/1022910821149312/1023021997355072
//  用一个对象替换掉PrimaryStudent的原型
//  你这不算继承，只是把Student原型里的方法复制到PrimaryStudent里了。如果给Student.prototype新增一个方法，PrimaryStudent将继承不到。
//  
Parent.prototype = {
  // 保留自己的构造方法
  constructor: Parent,
  // es6语法，父类的原型对象
  ...Child.prototype
}





/**
// 采用原型对象上的拷贝方法的方式 实现继承
// A.prototype 后期(拷贝过程之后)增加 方法 不能被继承过去

A.prototype.show=function ()
{
	alert(this.abc);
};
//继承A
function B()
{
	//this->new B()
	A.call(this);  // 借用A的构造函数
}

// 原理：复制方法
// 覆盖原型和方法复制

//B.prototype=A.prototype;  // 引用类型, 传递的是地址
for(var i in A.prototype)
{
	B.prototype[i]=A.prototype[i];
}
*/
